import axios from 'axios';
import { message } from 'ant-design-vue';

// 创建 Axios 实例
const request = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || 'http://localhost:3000/api', // 接口基础路径
  timeout: 10000, // 超时时间（10秒）
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
});

// 请求拦截器：添加认证令牌
request.interceptors.request.use(
  (config) => {
    // 添加认证令牌
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器：统一处理后端响应
request.interceptors.response.use(
  (response) => {
    // 直接返回响应数据
    return response.data;
  },
  (error) => {
    // 网络错误或服务器错误处理
    let errorMessage = '网络异常，请稍后重试';
    
    if (error.code === 'ERR_NETWORK') {
      errorMessage = '网络连接失败，请检查网络连接';
    } else if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
      errorMessage = '请求超时，请重试';
    } else if (error.response) {
      const status = error.response.status;
      if (status >= 500) {
        errorMessage = '服务器内部错误，请稍后重试';
      } else if (status === 404) {
        errorMessage = '请求的资源不存在';
      } else if (status === 403) {
        errorMessage = '没有权限访问该资源';
      } else if (status === 401) {
        errorMessage = '身份验证失败，请重新登录';
      } else {
        errorMessage = `请求失败（${status}）：${error.response.data?.message || errorMessage}`;
      }
    }
    
    // 显示错误消息
    message.error(errorMessage);
    
    // 保留原始错误信息
    error.userMessage = errorMessage;
    console.error('Request error:', {
      message: error.message,
      code: error.code,
      status: error.response?.status,
      url: error.config?.url
    });
    
    return Promise.reject(error);
  }
);

export default request;
